#include <stdlib.h>
#include <string.h>
#include <iostream>

using std::cout;
using std::endl;

//malloc/free与new/delete之间的异同点
//相同点
//1、都是进行用来申请堆空间的
//2、都需要成对出现，不能交叉,有可能会出现问题
//
//不同点
//1、malloc/free是C语言中的库函数，但是new/delete是C++的表达式
//2、使用malloc申请堆空间的时候，是原始的未初始化的空间，所以
//使用上要麻烦一些，但是new申请的空间已经初始化了

void test()
{
    //申请单个变量
    int *pInt  = (int *)malloc(sizeof(int));//1、申请空间
    memset(pInt, 0, sizeof(int));//2、初始化(清零)
    *pInt = 100;//3、赋值
    cout << "*pInt = " << *pInt << endl;
    free(pInt);//4、回收

    //申请数组  10 int类型数据
    int *pArr  = (int *)malloc(sizeof(int) * 10);//1、申请空间
    memset(pArr, 0, sizeof(int) * 10);//2、初始化(清零)
    pArr[0] = 100;//3、赋值
    pArr[1] = 200;
    free(pArr);//4、回收

}

void test2()
{
    //1、申请空间、初始化（清零）、赋初值
    int *pInt = new int(111);
    cout << "*pInt = " << *pInt << endl;
    delete pInt;//2、回收

    cout << endl;
    //1、申请空间、初始化（清零）、赋初值
    int *pArr = new int[10]();//ok
    /* int *pArr = new int[10]{1, 3, 5};//ok,可以赋初值 */
    cout << "pArr[0] = " << pArr[0] << endl;

    delete []  pArr;//回收数组,回收
}

int main(int argc, char *argv[])
{
    test2();
    return 0;
}

